﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Web.SessionState; //第一步：导入此命名空间
//ashx文件要使用Session,必须实现Session接口;
using System.Linq;
using System.Web;
using System.IO;
using HKEA.CMS.Core.Utility;

using HKEA.CMS.Core.Models;
using HKEA.CMS.Core.BLL;
using iMaker.Library;
using HKEA.CMS.Core.BLL.Tbl;

namespace WebApplication.ServerAshxFile
{
    /// <summary>
    /// WebLogin 的摘要说明
    /// </summary>
    public class WebLogin : IHttpHandler, IRequiresSessionState //第二步：实现接口 到此就可以使用Session了
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string type = context.Request.QueryString["type"];
            if (type == "1")//新增一条记录
            {
                Add(context);
            }
            else if (type == "2")//修改一条记录
            {
                Update(context);
            }
            else if (type == "3")//根据UID获取记录,截取关键字段 （用途修改之前获取值填充）
            {
                GetWebLoginFieldByUID(context);
            }
            else if (type == "10")//根据CustomerUID发送密码邮件给授权cp
            {
                SendEmailToContactPerson(context);
            }
        }

        private void Add(HttpContext context)
        {
            tblCust_WebLoginBLL bll = new tblCust_WebLoginBLL();
            tblCust_WebLogin entWebLogin = new tblCust_WebLogin();
            string name = context.Request.QueryString["name"];
            string status = context.Request.QueryString["status"];
            string custuid = context.Request.QueryString["custuid"];
            int ret = 0;
            string ent_html = "none";
            if (!string.IsNullOrEmpty(custuid) && !string.IsNullOrEmpty(status) && !string.IsNullOrEmpty(name))
            {
                if (isExistWebLogin(name))
                {
                    ret = -1;
                }
                else
                {
                    entWebLogin.LoginName = name.Trim();
                    entWebLogin.Status = int.Parse(status);
                    entWebLogin.LoginPassword = StringSecurity.GetRnd(6, true, true, false, false, string.Empty);
                    entWebLogin.CustomerUID = string.IsNullOrEmpty(custuid) ? -1 : int.Parse(custuid);
                    entWebLogin.LastModifyBy = context.Session[Constant.SessionName.Manage] == null ? "system" : (context.Session[Constant.SessionName.Manage] as tblUser).User_Name.Trim();
                    ret = bll.InsertENT(entWebLogin);

                    ent_html = string.Format("<tr id='tr_{0}'><td>added</td><td class='td2'>{1}</td><td class='td3'>{2}</td><td class='td1'>{3}</td><td width='160' class='td9'><a href='javascript:Edit({4})'>Edit</a> | <a href='javascript:ToggleDocument(\"SendBox\")'>Send Email</a></td></tr>", ret, name.Trim(), GetStatusString(entWebLogin.Status), DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"), ret);
                }
            }
            context.Response.Write(ret+"&"+ent_html);
        }

        private void Update(HttpContext context)
        {
            tblCust_WebLoginBLL bll = new tblCust_WebLoginBLL();
            tblCust_WebLogin entWebLogin = new tblCust_WebLogin();
            int ret = 0;
            string ent_html = "none";
            string name = context.Request.QueryString["name"];
            string status = context.Request.QueryString["status"];
            string webloginUID = context.Request.QueryString["webloginUID"];
            string custuid = context.Request.QueryString["custuid"];
            if (!string.IsNullOrEmpty(custuid) && !string.IsNullOrEmpty(webloginUID) && !string.IsNullOrEmpty(status) && !string.IsNullOrEmpty(name))
            {
                entWebLogin = bll.GetENT(int.Parse(webloginUID));
                if (entWebLogin != null)
                {
                    entWebLogin.LoginName = name.Trim();
                    entWebLogin.Status = int.Parse(status);
                    entWebLogin.LastModifyBy = context.Session[Constant.SessionName.Manage] == null ? "system" : (context.Session[Constant.SessionName.Manage] as tblUser).User_Name.Trim();

                    bll.UpdateENT(entWebLogin);
                    ret = entWebLogin.CustWebLoginUID;
                    ent_html = string.Format("<td>edited</td><td class='td2'>{0}</td><td class='td3'>{1}</td><td class='td1'>{2}</td><td width='160' class='td9'><a href='javascript:Edit({3})'>Edit</a> | <a href='javascript:ToggleDocument(\"SendBox\")'>Send Email</a></td>", name.Trim(), GetStatusString(entWebLogin.Status), entWebLogin.CreationDate.ToString("yyyy-MM-dd hh:mm:ss"), entWebLogin.CustWebLoginUID);
                }
            }
            context.Response.Write(ret + "&" + ent_html);
        }

        private void GetWebLoginFieldByUID(HttpContext context)
        {
            tblCust_WebLoginBLL bll = new tblCust_WebLoginBLL();
            tblCust_WebLogin entWebLogin = new tblCust_WebLogin();
            string ret = string.Empty;
            string webloginUID = context.Request.QueryString["webloginUID"];
            if ( !string.IsNullOrEmpty(webloginUID))
            {
                entWebLogin = bll.GetENT(int.Parse(webloginUID));
                if (entWebLogin != null)
                {
                    ret = string.Format("{0}&{1}&{2}",entWebLogin.CustWebLoginUID,entWebLogin.LoginName,entWebLogin.Status);
                }
            }
            context.Response.Write(ret);
        }

        /// <summary>
        /// 给授权CP发送 账号信息  因为邮件 内容没有定，后来做的自己补上吧  ^_^！
        /// </summary>
        /// <param name="context"></param>
        public void SendEmailToContactPerson(HttpContext context)
        {
            string ret ="1";
            string custuid = context.Request.QueryString["custuid"];
            string webloginuid = context.Request.QueryString["webloginuid"];
            string send_email = context.Request.QueryString["send_email"];

            if (!string.IsNullOrEmpty(custuid) && !string.IsNullOrEmpty(webloginuid) && !string.IsNullOrEmpty(send_email))
            {
                tblCust_WebLogin entWebLogin = tblCust_WebLoginBLL.GetInstance().GetENT(int.Parse(webloginuid));

                string[] to_email = send_email.Split(';');
                foreach (string e in to_email)
                {
                    if (!string.IsNullOrEmpty(e.Trim()) && entWebLogin != null)
                    {
                        //发送Email
                        Hashtable args = new Hashtable();
                        args.Add("login_id", entWebLogin.LoginName.Trim());
                        args.Add("password", entWebLogin.LoginPassword.Trim());
                        if (!MailManage.CommonSendEmail("EmailSubject_WebLoginAccount", Constant.EmailTemplateName.WebLoginAccount, e.Trim(), args))
                            ret = "0";
                    }
                }
            }
            //else
            //{ ret = "2"; }

            context.Response.Write(ret);
        }
        
        private bool isExistWebLogin(string loginName)
        {
            bool ret = false;
            tblCust_WebLoginBLL bll = new tblCust_WebLoginBLL();
            tblCust_WebLogin entWebLogin = new tblCust_WebLogin();
            entWebLogin.LoginName = loginName;
            if (bll.GetCountByENT(entWebLogin) > 0)
            {
                ret = true;
            }
            return ret;
        }

        /// <summary>
        /// 获取状态字符串
        /// </summary>
        /// <param name="val"></param>
        /// <returns></returns>
        protected string GetStatusString(object val)
        {
            string ret = string.Empty;
            if (val != null)
            {
                if (val.Equals(Constant.WebLoginStatus.Active))
                    ret = "Active";
                else
                    ret = "Inactive";
            }
            return ret;
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}